設計師在製作 .riv 檔的過程中,可能會用到一些資源 assets,例如圖片、字體、音檔等等,就我們的經驗來說,這些資源比你想像中多非常多,不要小看設計師大大們的創意。
這些資源一多的時候,Rive 的檔案容量當然就會變大,此時有沒有辦法讓檔案容量小一點?就是今天要討論的問題,以下是幾種可能的方式。
首先要說的是,Rive 本質上是 Canvas 2D,所以本質上是向量圖,因此理論上來說,能用向量圖就盡量用,盡量不要使用外部資源會比較好。當然我們可以理解,可能因為實作上方便或是業主的需求,不方便用向量圖,那還是有其他方法。
另一個思考方向是,類似前端的 code splitting,把 .riv 檔跟他的 assets 分開打包,等初始化 Rive 的時候再動態引入就好,因此 .riv 檔本身的容量會變小。
這乍看之下有點朝三暮四,但實際上效果還不錯。畢竟一來下載資源時可以平行下載,不會一次載一大包,所以下載速度會快一點。二來因為把本來一大包的 .riv 檔拆成一個主檔案 + 很多資源包,這些資源包要在前端各自做 preload 或 cache 都比較方便,或者後端用 CDN 掛起來或是做其他加速等等,甚至規畫的好的話,不同的 .riv 檔可以共用相同的資源,例如字體。
關於動態引入資源這件事,Rive 官方已經有提供對應的 API 了,語法本身有點冗但沒有很難,而且這算是比較新的 API,搞不好哪天語法又改了,所以我是覺得直接看文件比較快。
畢竟可以動態引入資源了,所以理論上可以更進一步,根據使用者的裝置、地區、網速等等,載入不同的資源,例如爛手機就用比較小的圖片,好手機就用比較大的圖片之類的。理論上只要能做到這一點,很多效能的問題都可以解決了。
但老實講實務上來說,不一定每位業主或設計師會願意妥協。人都是視覺動物嘛,所以實務上大家當然喜歡漂漂亮亮的美術,不一定會很認真的意識到「過多的資源會造成載入效能變慢」這件事。或者這樣說好了,就算有意識到,通常也會想說「哎呀沒關係東西漂亮比較重要,(只要做的夠漂亮機器再升級一下再多開幾台)使用者不會太在意的🙈🙈🙈」。很少團隊會真的認真去計算載入速度與使用者人數的關係,雖然已經有很多研究指出兩者是正向的。
再加上通常有時程上的問題,畢竟做一個解析度比較低的圖片還是要花一點時間,甚至可能會要改變一些設計。所以雖然這是一個很好的減輕效能負擔的方案,但因為種種原因,採用的人沒有很多。
我還是覺得很多問題最終要從設計層面解決,解鈴還需繫鈴人,很多時候工程師只能從程式上給一點幫助,同時這些幫助是有 trade off 的,只有鰲拜才能我全都要。
我覺得 Rive 身為一個工具,他的設計理念一再反應了這件事,這點我們最後幾天再來深入討論一下。